package personal.wang.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import personal.wang.handler.*;
import personal.wang.manager.RecordGeneratorManager;
import personal.wang.manager.WorkerManager;
import personal.wang.enm.MessageType;

import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;

/**
 * @className: MessageUtil
 * @Description:
 * @Author: wangyifei
 * @Date: 2025/2/14 16:18
 */
public class MessageUtil {
    private static Logger logger = LoggerFactory.getLogger(MessageUtil.class);
    // 这里的 HashMap 可不可以使用 EnumMap 来代替, 不优雅。
    // EnumMap 只是建立了 <Enum , Handler> 枚举和处理类的映射关系。
    // 我是建立了 flag 和 Handler 的映射关系。
    //
    private static Map<Integer , MessageType> map = new HashMap();

    public static void initMap(WorkerManager workerManager , RecordGeneratorManager recordGeneratorManager){
        for (MessageType value : MessageType.values()) {
            map.put(value.getFlag() , value);
            if(value.getFlag() == MessageType.HEART_BEAT_REQUEST.getFlag()){
                value.setHandler(new HeartbeatHandler(workerManager));
            }else if(value.getFlag() == MessageType.COMMAND_MESSAGE.getFlag()){
                value.setHandler(new CommandMessageHandler(workerManager));
            }else if(value.getFlag() == MessageType.TO_WORKER_COMMAND_MESSAGE.getFlag()){
                value.setHandler(new ToWorkerCommadMessageHandler(workerManager));
            }else if(value.getFlag() == MessageType.TEMPLATE_MESSAGE.getFlag() ){
                value.setHandler(new WorkerTemplateHandler(recordGeneratorManager));
            }else if(value.getFlag() == MessageType.ACK_MESSAGE.getFlag()){
                value.setHandler(new ACKHandler(recordGeneratorManager));
            }
            logger.info("k:{} , v:{} " , value.getFlag() , value);
        }
    }
    public static MessageType int2MessageType(int value){
        return map.get(value) ;
    }

}
